package rayCaster;

public interface ApplicationInterface {
	//For our command parser
	public static final String[] validSwitches = {"i","o", "size", "fov", "cm", "cv", "time" }; 
	public enum SWITCHES{INPUT, OUTPUT, SIZE, ANGLE, COLOR_MODE, COLOR_VAR_MODE, TIME};
	
	//Default scene to work with
	public static final String DEFAULT_SCENE = "scene1.sc";
	
	//Default output filename
	public static final String OUT_FILE = "scene1";	
	
	//Default output file format
	public static final String DEFAULT_EXTENSION = "png";
		
	public enum COLOR_VAR_OPTIONS{LINEAR, LOG};	
	public enum COLOR_OPTIONS{RANDOM, ORDERED};
	
	//For loading the scenes
	public static final String[] scenesList = {"scene1.sc", "scene2.sc", "scene3.sc"};
	
	//Definition for the RGB components to build images
	public enum RGB_POS{ALPHA, RED, GREEN, BLUE };
	
	//We define the pure Red, Green, Blue ... Black and White
	public static final int NO_TRANSPARENCY = 255;
	public static final int FULL_TRANSPARENCY = 0;
	public static final int COLOR_RED = 0xFFFF0000;		//(NO_TRANSPARENCY << 24) | (255 << 16) | (0 << 8) | 0; 
	public static final int COLOR_GREEN = 0xFF00FF00; 	//(NO_TRANSPARENCY << 24) | (0 << 16) | (255 << 8) | 0;	 
	public static final int COLOR_BLUE = 0xFF0000FF;	//(NO_TRANSPARENCY << 24) | (0 << 16) | (0 << 8) | 255;
	public static final int COLOR_BLACK = 0xFF000000;	//(NO_TRANSPARENCY << 24) | (0 << 16) | (0 << 8) | 0; 
	public static final int COLOR_WHITE = 0xFFFFFFFF; 	//(NO_TRANSPARENCY << 24) | (255 << 16) | (255 << 8) | 255;	 
	public static final int COLOR_PURPLE = 0xFF800080;
	public static final int COLOR_YELLOW = 0xFFFFFF00;
	public static final int COLOR_ORANGE = 0xFFFFA500;
	public static final int COLOR_TRANSPARENT = (FULL_TRANSPARENCY << 24) | (255 << 16) | (255 << 8) | 255;
	
	// Asignacion de colores a los elementos de la escena para los modos RANDOM y ORDERED
	public static final int colors[]={COLOR_PURPLE, COLOR_BLUE, COLOR_GREEN, COLOR_YELLOW, COLOR_ORANGE, COLOR_RED};
	public static final int BACKGROUND_COLOR = COLOR_WHITE;
	public static final int NOT_ASIGNED_COLOR = COLOR_BLACK;
	
	// Modo de variacion del color de los elementos de la escena
	public static final double SHADOW_STRENGTH = 0.8;	// 0: valor minimo	1: valor maximo
	
	//Simple Primitives default colors
	public static final int TRIANGLE_COLOR = COLOR_RED;
	public static final int QUADRILATERAL_COLOR = COLOR_BLUE;	
	
	//Default size for the imagePlate, also called canvas
	public static final int WIDTH = 600;
	public static final int HEIGHT = 600;
	// Para escena 1 fov=1
	/*
	public static final int WIDTH = 1000;
	public static final int HEIGHT = 1000;
	*/
	// Para escena 2 fov=1
	/*
	public static final int WIDTH = 1000;
	public static final int HEIGHT = 1000;
	*/
	// Para escena 3 fov=20
	/*
	public static final int WIDTH = 1600;
	public static final int HEIGHT = 400;
	*/
	//Default canvas position	
	public static final double[] CANVAS_POSITION = {0, 0, 5};
	
	//Default camera position, eye position
	public static final double[] CAMERA_POSITION = {0, 0, 10};	
	//Default vertical reference for the camera	
	public static final double[] VERT_REFERENCE = {0, 1, 10};	
	//Default Visual Angle for the camera 
	public static final double  VISUAL_ANGLE = 20;
	 
	//Default values for a Cube
	public static final double CUBE_SIDE_LEN = 1;
	public static final double[] CUBE_POSITION = {0, 0, 0.5};
	public static final int CUBE_COLOR = COLOR_BLUE;
	
	//Default values for the Sphere
	public static final double SPHERE_RADIUS = 1;
	public static final double[] SPHERE_POSITION = {0, 0, 0};
	public static final int SPHERE_COLOR = COLOR_RED;
	
	//Default values for the Piramid
	public static final double PYRAMID_SIDE = 1;
	public static final double PYRAMID_HEIGHT = 1;
	public static final double[] PYRAMID_APEX = {0, 0, 1};
	//Barycentric point or centroid of a pyramid is located on the line segment
	//that connects the apex to the centroid of the base, and divides that 
	//segment in the ratio 3:1. For the default case, it is easy
	public static final double[] PYRAMID_POSITION = {0, 0, 1.0/3.0};
	public static final int PYRAMID_COLOR = COLOR_GREEN;
	
}
